package test.com.sky.designPattern.templatePattern;

/**
 * 模板 抽象父类
 */
abstract class MyContainerBase {


    //模板方法
    void TemplateMethod() {
        SpecificMethod();
        abstractMethod1();
        abstractMethod2();
    }

    //具体方法
    private void SpecificMethod() {
        System.out.println("抽象类中的具体方法被调用...");
    }

    public abstract void abstractMethod1(); //抽象方法1

    public abstract void abstractMethod2(); //抽象方法2

    public abstract String getInfo();  //源码中的抽象方法


}

//具体子类
class MyStandardContext extends MyContainerBase {


    public void abstractMethod1() {
        System.out.println("抽象方法1的实现被调用...");
    }

    public void abstractMethod2() {
        System.out.println("抽象方法2的实现被调用...");
    }

    /**
     * The descriptive information string for this implementation.
     */
    private static final String info = "org.apache.catalina.core.StandardContext/1.0";


    @Override
    public String getInfo() {
        return info;
    }


}


/**
 * @author : wushikai
 * <p>
 * date : 2022-05-30
 */
class TemplateClient {

    public static void main(String[] args) {
        MyContainerBase context = new MyStandardContext();
        context.TemplateMethod();
        context.getInfo();


    }
}
